function A404
format long;

% 期望最大化算法
% EM算法是含隐变量的概率模型参数的MLE，或极大后验概率估计法。
% 每次迭代由两步组成：E步，求期望；M步，求极大。

% 非中心卡方分布的估计参数
% 从自由度为8且非中心性参数为3的非中心卡方分布生成大小为1000的样本数据。
rng default                                                   % 实现可重复性
x = ncx2rnd(8, 3, 1000, 1);
% 绘制x数据的直方图。
subplot(2, 2, 1)
histogram(x)
title('非中心卡方分布样本数据') %标题
legend('非中心卡方分布样本')

% 根据样本数据估计非中心卡方分布的参数。为此，使用pdf输入参数自定义非中心卡方pdf。
[phat1, pci1] = mle(x, 'pdf', @(x, v, d)ncx2pdf(x, v, d), 'start', [1, 1]);

% 具有已知尺度参数的拟合Rician分布
% 从非中心性参数为8、尺度参数为5的Rician分布生成大小为1000的样本数据。首先创建Rician分布。
r = makedist('Rician', 's', 8, 'sigma', 5);
% 从上面创建的分布生成样本数据。
rng default                                                   % 实现可重复性
x = random(r, 1000, 1);
% 绘制x数据的直方图。
subplot(2, 2, 2)
histogram(x)
title('Rician分布样本数据')
legend('Rician分布样本')

% 假设尺度参数已知，并根据样本数据估计非中心性参数。要使用mle执行此操作，必自定义定义Rician概率密度函数。
[phat2, pci2] = mle(x, 'pdf', @(x, s) pdf('rician', x, s, 5), 'start', 10);
%[phat2, pci2] = mle(x, 'pdf', @(x, s, sigma) pdf('rician', x, s, 5), 'start', 10)


% 估计成功概率
% 从二项分布生成100个随机观测值，试验次数n=20，成功概率p=0.75。
data = binornd(20, 0.75, 100, 1);
% 绘制data数据的直方图。
subplot(2, 2, 3)
histogram(data)
title('二项分布样本数据')
legend('二项分布样本')

% 使用模拟样本数据估计成功概率和95%置信限。
[phat3, pci3] = mle(data, 'distribution', 'binomial', 'alpha', .05, 'ntrials', 20);

% 使自定义分发适合审查数据
% 加载样本数据。  
load('readmissiontimes.mat');
% 数据包括ReadmissionTime，有100名患者的再入院时间。
% 列向量Censored具有每个患者的审查信息，其中1表示经过审查的观察，0表示观察到的确切再入院时间。这是模拟数据。
% 定义自定义概率密度和累积分布函数。
custpdf = @(data, lambda) lambda*exp(-lambda*data);
custcdf = @(data, lambda) 1-exp(-lambda*data);
% 绘制ReadmissionTime数据的直方图。
subplot(2, 2, 4)
histogram(ReadmissionTime)
title('删失数据的自定义分布样本')
legend('删失数据的自定义分布样本')

% 估计删失样本数据的自定义分布的参数lambda。
phat4 = mle(ReadmissionTime, 'pdf', custpdf, 'cdf', custcdf, 'start', 0.05, 'Censoring', Censored);

